package MODELS;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import ENTITIESMODELS.UserEntitys;

public class UserModels extends BaseModels<UserEntitys> {
    public UserModels(Connection objConnection, UserEntitys objSecurity) {
        super(objConnection, objSecurity);
    }

    @Override
    public ResultSet GetElements() throws Exception {
        try {
            // 1. Kiểm tra trạng thái kết nối
            if (!m_objConnection.isClosed()) {
                m_objCmst = m_objConnection.prepareCall("{call SP_GET_USERS_ALL()}");
                // 2. Thực thi truy vấn
                m_objRs = m_objCmst.executeQuery();
            }
        } catch (Exception ex) {
            throw ex;
        }
        return m_objRs;
    }

    @Override
    public ResultSet GetElementById(UserEntitys obj) throws Exception {
        return null;
    }

    @Override
    public void CheckElement(UserEntitys obj) throws Exception {
        try {
            // 1. Kiểm tra trạng thái kết nối
            if (!m_objConnection.isClosed()) {
                m_objCmst = m_objConnection.prepareCall("{call SP_CHECKLOGIN(?,?)}");

                // 2. Thiết lập tham số
                m_objCmst.setString("UserName", obj.getUserName());
                m_objCmst.setString("Password", obj.getPasswords());

                // 3. Thực thi truy vấn
                m_objRs = m_objCmst.executeQuery();

                // 4. Duyệt tập ghi
                while (m_objRs.next()) {
                    m_objSecurityContext.setUserId(m_objRs.getString("UserId"));
                    m_objSecurityContext.setUserName(m_objRs.getString("UserName"));
                    m_objSecurityContext.setPasswords(m_objRs.getString("Passwords"));
                    m_objSecurityContext.setFullName(m_objRs.getString("FullName"));
                    m_objSecurityContext.setLoginSuccess(true);
                    return;
                }
            }
        } catch (SQLException ex) {
            throw ex;
        }
    }

    @Override
    public boolean InsertElement(UserEntitys obj) throws Exception {
        try {
            // 1. Kiểm tra trạng thái kết nối
            if (!m_objConnection.isClosed()) {
                m_objCmst = m_objConnection.prepareCall("{call SP_INSERT_USER(?,?,?,?,?,?,?,?,?)}");

                // 2. Thiết lập tham số cho Store Procedure
                m_objCmst.setString("UserId", obj.getUserId());
                m_objCmst.setString("UserName", obj.getUserName());
                m_objCmst.setString("Passwords", obj.getPasswords());
                m_objCmst.setString("FullName", obj.getFullName());
                m_objCmst.setString("Birthday", obj.getBirthday());
                m_objCmst.setBoolean("Sex", obj.isSex());
                m_objCmst.setString("Mobile", obj.getMobile());
                m_objCmst.setString("Email", obj.getEmail());
                m_objCmst.setString("Address", obj.getAddress());

                // 3. Thực thi truy vấn
                m_objCmst.execute();
            }
        } catch (SQLException ex) {
            throw ex;
        }
        return true;
    }

    @Override
    public boolean UpdateElement(UserEntitys obj) throws Exception {
        try {
            // 1. Kiểm tra trạng thái kết nối
            if (!m_objConnection.isClosed()) {
                m_objCmst = m_objConnection.prepareCall("{call SP_UPDATE_USER(?,?,?,?,?,?,?,?,?)}");

                // 2. Thiết lập tham số cho Store Procedure
                m_objCmst.setString("UserId", obj.getUserId());
                m_objCmst.setString("UserName", obj.getUserName());
                m_objCmst.setString("Passwords", obj.getPasswords());
                m_objCmst.setString("FullName", obj.getFullName());
                m_objCmst.setString("Birthday", obj.getBirthday());
                m_objCmst.setBoolean("Sex", obj.isSex());
                m_objCmst.setString("Mobile", obj.getMobile());
                m_objCmst.setString("Email", obj.getEmail());
                m_objCmst.setString("Address", obj.getAddress());

                // 3. Thực thi truy vấn
                m_objCmst.execute();
            }
        } catch (SQLException ex) {
            throw ex;
        }
        return true;
    }

    @Override
    public boolean DeleteElement(UserEntitys obj) throws Exception {
        try {
            // 1. Kiểm tra trạng thái kết nối
            if (!m_objConnection.isClosed()) {
                m_objCmst = m_objConnection.prepareCall("{call SP_DELETE_USER(?)}");

                // 2. Thiết lập tham số cho Store Procedure
                m_objCmst.setString("UserId", obj.getUserId());

                // 3. Thực thi truy vấn
                m_objCmst.execute();
            }
        } catch (SQLException ex) {
            throw ex;
        }
        return true;
    }

    @Override
    public boolean FindElement(UserEntitys obj) throws Exception {
        return false;
    }

}
